/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：太平金科-通用能力封装层-执行http网络请求
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taipingframework.http;

import com.taipingframework.http.handler.IHttpRequestHandler;

import com.taipingframework.utility.context.SpringContextHolder;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * HTTP请求对象 - 策略工厂
 */
public class HttpRequestHandlerFactory {

    private static final Map<String, IHttpRequestHandler> HTTP_REQUEST_HANDLER_MAP = new HashMap<>();

    static {
        Collection<IHttpRequestHandler> beanCollection = SpringContextHolder.getBeansOfType(IHttpRequestHandler.class).values();
        for (IHttpRequestHandler bean : beanCollection) {
            Class<? extends IHttpRequestHandler> clazz = bean.getClass();
            Component annotation = clazz.getAnnotation(Component.class);
            HTTP_REQUEST_HANDLER_MAP.put(annotation.value(), bean);
        }
    }

    /**
     * 通过策略工厂创建具体的HTTP请求处理器对象
     *
     * @param requestMethod HTTP请求方式
     * @return 返回HTTP请求处理器对象
     */
    public static IHttpRequestHandler createHttpRequestHandler(String requestMethod) {
        return HTTP_REQUEST_HANDLER_MAP.get(requestMethod.toUpperCase());
    }

}
